Effective Objective-C 笔记

前言:再次读,一样的内容,不一样的感悟。

第一章 熟悉Objective-C

在类的头文件中尽量少引进其它头文件

在类的头文件中如果引入其它头文件,那么当前类的头文件被引入时之前引入的头文件也会被同时引入,这将大大延长项目的编译时间,并且能降低类之间的耦合。

优化: 如果当前头文件涉及到其它类时仅仅只声明时,可以使用@class声明欲引用的类,在.m文件中引入类的头文件(向前声明)。对协议而言,尽量将遵守协议的声明移至分类中,再不行,就把协议放在单独的文件中在引入。

多用字面量语法(语法糖)

字面量语法多用于Foundation框架中的类。使用字面量语法可以有效缩减源代码长度,更加简洁易读。

1
2
3
4
5
6
NSString *string = @"kenny best";
NSArray *array = @[@"kenny", @"best"];
NSDictionary *dictionary = @{@"kenny" : @"best"};
NSMutableArray *mutableArray = @[@"kenny", @"best"].mutableCopy;
NSMutableDictionary *mutableDic = @{@"kenny" : @"best"}.mutableCopy;
NSNumber *number = @1; // @1.25f @YES @'K'

使用字面量创建数组、字典时,需要断定值的非空性,否则会抛出异常。使用语法糖创建的字典、数组时应该通过下标操作元素。

多用类型常量 少用#define

常量的定义尽可能的避免#define,用#define定义的内容是在编译前进行内容替换。
如果定义的常量尽在当前编译单元(实现文件)内有效,那么在此常量前加k标明。如下:

static const NSString *name = @"kenny best";

如果定义的常量在多个编译单元时,那么这个常量将放在全局符号表中,使用 extern去声明,并在对应的实现文件中定义值,通常还会以类名作为前缀用于区分。

.hextern cosnt NSString *name;声明,

.mconst NSString *name = @"kenny best";定义

类型常量声明的时候已经确定类型,并且添加限制,可以借助编译器来确保常量正确。

使用枚举表示状态、选项

马上更新。